home *** CD-ROM | disk | FTP | other *** search
- #! /bin/sh
- # spacefor - determine available disk space
- # About how many things of $1 bytes will fit in the available space for
- # stuff of type $2 ("incoming", "articles", "control", "outbound $3",
- # or "archive") without cramping things too badly?
- #
- # You'll have to change this -- your blocksize, minimum-free-desired amounts,
- # and df output format will probably differ, and you may need to name
- # your filesystems explicitly. Note that all amounts are expressed in
- # target-filesystem blocks, not some arbitrary absolute unit. (Absolute
- # units might be better but there is no agreement on what they should be.)
-
- # =()<. ${NEWSCONFIG-@<NEWSCONFIG>@}>()=
- . ${NEWSCONFIG-/usr/lib/news/bin/config}
-
- PATH=$NEWSCTL/bin:$NEWSBIN:$NEWSPATH ; export PATH
- umask $NEWSUMASK
-
- # punt to server if necessary
- if test -r $NEWSCTL/server
- then
- server="`cat $NEWSCTL/server`"
- me="`hostname`"
- if test " $server" != " $me"
- then
- exec rsh $server -n /bin/sh -c "'PATH=$PATH `basename $0` $*'"
- # does not return
- fi
- fi
-
- # head off special case
- case "$1" in
- 0) echo 10000 ; exit 0 ;;
- esac
-
- # argument to df, df units, and free space desired (in df units)
- dfunit=1024 # default df unit (bytes)
- case "$2" in
- incoming) arg="$NEWSARTS/in.coming" ; desire=5000 ;;
- articles) arg="$NEWSARTS" ; desire=5000 ;;
- control) arg="$NEWSCTL" ; desire=3000 ;; # for expire, mostly
- outbound) arg="/usr/spool/uucp" ; desire=10000 ;; # ignore $3
- archive) arg="$NEWSARTS" ; desire=1 ;; # system-specific
- *) echo "$0: bad type argument \`$2'!!" >&2
- exit 2 ;;
- esac
-
- # In the following, the initialization of nf determines which field the
- # block count comes from, and the one for nr determines which line. For
- # System V, the Makefile edits in a sed which tries to strip silliness
- # off in a reasonably System-V-variant-independent way. Expr would be
- # faster than awk, but on a 16-bit machine, expr does 16-bit arithmetic,
- # which isn't enough.
-
- # this is set up for the stupid 4BSD df
- df $arg | awk "BEGIN { nf = 4 ; nr = 2 }
- NR == nr && NF >= nf {
- nb = (\$nf - $desire) * $dfunit / $1
- if (nb > 10000)
- nb = 10000 # ensure representable as integer
- nb = int(nb)
- if (nb <= 0)
- print 0
- else
- print nb
- exit
- }
- NR == nr && NF < nf { # idiotic Berkeley continuation
- nr += 1
- nf -= 1
- }"
-